HTMLではその機能を拡張するため、ブラウザのベンダーが独自のタグを定めてそれが一般化し、 追随される形でW3Cの標準となってきまが、このような拡張ももう限界に達しているようです。 HTML4.0 strict では文書の構造と表現方法を分離し、HTMLは文書構造だけを記述し表現は スタイルシートを使って別に定義するという方向性を打ち出しました。これによって文書の表現 方法は構造にとらわれず、より自由度の高いものになりました。
さらに、HTMLの文書構造自体の柔軟性も要求されてきました。HTMLは既存の文書をハイパーテキスト 化するのには十分なのでしょうが、それ以外の様々な目的のために使用するのは無理があります。 そこで要素や構造を文書制作者が独自に決定できるような柔軟性を持つマークアップ言語が必要にな ってきました。
その点では、SGMLは柔軟性に富み様々な文書をマークアップできる仕組みを持っていますが、 その反面、実際にそれを運用するとなると、SGML宣言やDTD等がその文書毎に必要になり、 その適応は複雑にならざるを得ません。 そこで、SGMLの機能の一部を制限した簡略なマークアップ言語としてXMLが登場しました。 XMLの拡張可能( Extensible )という言葉はHTMLにおいては困難だった拡張が可能になったことを 意味しているのでしょう。XMLがHTMLと根本的に違うのは、HTMLがSGMLの一つのアプリケーション だったのに対し、XMLはSGMLと同様にそれ自身が文書のマークアップを定義できるメタ言語である ということです。
SGMLでは文書毎にSGML宣言や文書型定義(DTD)を作成するのが必須でした。 XMLでは必ずしもそれらは要求はされません。その代わり、様々な省略を許さない整形式(well formed) の文書とすることで、DTD無しでも文書構造を解釈できるようにしています。
HTML文書はタグ省略の機構や短縮タグ機構を使うことによってマークアップを容易にしてきました。 これらの省略された部分を補うことによって、HTML文書を整形式のXML文書にすることができます。
<?xml version="1.0" encoding="Shift-JIS"?> <?XML:stylesheet type="text/css" href="persons.css"?> <persons> <person> <name>海藤 正夫</name> <sex>男</sex> <age>31</age> <home>西海市</home> </person> <person> <name>野呂 光</name> <sex>男</sex> <age>31</age> <home>西海市</home> </person> </persons>
persons.cssの内容
persons,person,name,age,sex,home { display: block } persons { margin: 2% 15% 3% 10%; background-color: #DFD; } person { margin: .3em .3em .3em .3em; padding:.2em .2em .2em .2em; width: 50%; } name { font-size: large; color: #66F; } age { font-size: medium; color: #FFF; background-color: #AAF; text-align: right; } sex { font-size: medium; color: #66F; background-color: #FFF; text-align: right; } home { font-size: medium; color: #66F; background-color: #FFF; text-align: right; }
XSL(Extensible Stylesheet Language)はスタイルシートを書き表す言語です。 XSLは以下の二つの部分から出来ています。
XTは、スタイルシートとしてXSLを使ったXML文書をHTML文書に変換するXSLプロセッサです。 XTはデフォルトのXMLパーサとしてXPというSAXパーサを使っていますが、XPは日本語の処理が出来 ません。そこで、日本語が利用できる IBM AlphaWorks のXML4Jをダウンロードし、これをXMLパーサとして使用します。
これらのアプリケーションの実行にはJAVAが必要です。JDKのバージョンは1.2を使用しました。 これらはhttp://java.sun.com/products/jdk/1.2/ja/ からダウンロードできますが、ファイルサイズが19.4MBと大きいのでJAVA系の雑誌など(例えば、JAVA WORLD) からインストールした方がいいかも知れません。
jdk1_2_2-win.exeをインストールすると、ルート下 C:\ に jdk1.2.2 というフォルダが出来ます。
autoexec.bat をエディタで開き、 c:\jdk1.2.2\bin への PATH を追加します。例えば、PATH行の下に
set PATH=%PATH%;c:\jdk1.2.2\bin
と、現在のPATHに c:\jdk1.2.2\bin へのPATHを追加する意味の行を入れます。
作業ディレクトリとして c:\bin を作ります。
XML4Jをダウンロードします。 ファイル名 xml4j_2_0_15.zip サイズは2.60MBでした。
xml4j_2_0_15.zipを解凍すると xml4j_2_0_15 というフォルダが生成され、その下に サブフォルダやファイルが展開されています。
生成したフォルダxml4j_2_0_15を作業ディレクトリ c:\bin に移動します。
xml4j_2_0_15フォルダ内の Readme.htmlには、APIの使用例として XML4Jを用いたサンプルアプリケーションが幾つか紹介されています。英文ですが、サンプル文書を使って 体験できるようになっているので、試してみると面白いかも知れません。
autoexec.bat に 環境変数 CLASSPATH に xml4j.jar を設定します。
set CLASSPATH=c:\bin\xml4j_2_0_15\xml4j.jar;
もし既に CLASSPATH が設定されている場合は、その行の最後に付け加えるか、または以下の行を autoexec.bat の最後に加えます。
set CLASSPATH=%CLASSPATH%;c:\bin\xml4j_2_0_15\xml4j.jar;
http://www.jclark.com/xml/xt.htmlから xt.zipをダウンロードします。
c:\bin内にxtフォルダを作成しその中で展開します。xtフォルダの中には以下のサブフォルダ とファイルが出来ます。
\com \demo xt.htm sax.jar xt.jar copying.txt
xt.jar を CLASSPATH に追加します。autoexec.bat に次の行を加えます。
set CLASSPATH=%CLASSPATH%;c:\bin\xt\xt.jar;
xtを実行するコマンドは添付の xt.htm によれば以下の通りです。
java -Dcom.jclark.xsl.sax.parser=your-sax-driver com.jclark.xsl.sax.Driver source stylesheet result
実際にこのコマンドを打っていくのは面倒なので、c:\bin上にバッチファイルを作ります。
バッチファイルの内容は次の通りになります。テキストファイルを新規作成して以下のコマンドを 貼り付けxt.batとして保存します。
java -Dcom.jclark.xsl.sax.parser=com.ibm.xml.parsers.SAXParser com.jclark.xsl.sax.Driver %1 %2 %3
c:\bin上に、XMLファイルが test.xml 、XSLスタイルシートが test.xslとしてあった場合、 c:\binからコマンドプロンプトを起動して以下のようにタイプすると 結果がresult.txtとして 出力されるわけです。
c:\bin>xt test.xml test.xsl result.txt
以下のような簡単なXML文書とXSLスタイルシートを作ってみます。
test.xml
<?xml version="1.0" encoding="shift_jis"?> <?xml-stylesheet type="text/xsl" href="test.xsl"?> <登場人物リスト> <登場人物> <名前>海藤 正夫</名前> <性別>男</性別> <年齢>31</年齢> <出身地>西海市</出身地> </登場人物> <登場人物> <名前>野呂 光</名前> <性別>男</性別> <年齢>31</年齢> <出身地>西海市</出身地> </登場人物> </登場人物リスト>
test.xsl ここではname要素だけを抽出しています。
<?xml version="1.0" encoding="shift_jis"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0" xmlns:html="http://www.w3.org/TR/REC-html40" result-ns="html"> <xsl:template match="/"> <html> <head> <title>XTのテスト</title> </head> <body> <div> <xsl:for-each select="登場人物リスト/登場人物"> <div> <xsl:value-of select="名前"/> </div> </xsl:for-each> </div> </body> </html> </xsl:template> </xsl:stylesheet>
result.txt
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html xmlns:html="http://www.w3.org/TR/REC-html40"> <head> <title>XTのテスト</title> </head> <body> <div> <div>海藤 正夫</div> <div>野呂 光</div> </div> </body> </html>
とりあえずHTMLファイルに変換されますが、日本語の文字が全部ユニコード番号の文字参照になって しまうのが難点です。これはXTがUTF-16以外でエンコーディングされた文字を文字参照で表してしまう のでしょうか?
XTによる変換で注意しなければならないのは、XSLのネームスペースです。 XSLに記述するネームスペースは以下のようになります。
xmlns:xsl="http://www.w3.org/XSL/Transform/1.0"
一方、IE5.0でXSLを使ったXML文書を表示させるには上記のネームスペースでは駄目で、 以下のようにしなければきちんと表示されないようです。
xmlns:xsl="http://www.w3.org/TR/WD-xsl"